from rest_framework import serializers
from home.models import AxfOrdergoods,AxfOrder
from market.market_serializers import GoodsSerializer


class OrderGoodsSerializer(serializers.ModelSerializer): # 订单中的商品(信息)的序列化类
    o_goods=GoodsSerializer() # 类似cart/cart_serializers.py中ListCartSerializer类中的注释。为了在获取订单数据时获取返回值中的o_goods的值，即订单中商品的详细信息；获取后在OrderSerializer类中序列化后才能在返回值中显示。AxfOrdergoods模型中的o_goods字段和AxfGoods模型是一对一关系，所以不能加many=True

    class Meta:
        model=AxfOrdergoods
        fields='__all__'


class OrderSerializer(serializers.ModelSerializer): # 订单本身的序列化类

    class Meta:
        model=AxfOrder
        fields='__all__'

    def to_representation(self, instance): # 重写这个方法，改变读取操作的序列化结果，标准(原始)序列化后的数据(即不重写时序列化后的数据)不符合需求时重写。from https://q1mi.github.io/Django-REST-framework-documentation/api-guide/serializers_zh/或https://www.django-rest-framework.org/api-guide/serializers/
        data=super().to_representation(instance) # 调用父类方法获取标准(原始)序列化后的数据
        order_goods=instance.goods.all() # instance就是当前订单。通过订单找商品。goods是AxfOrdergoods模型中o_order字段的related_name，o_order字段用于通过订单中的商品去查询订单，反向查询(通过订单去查询商品)用related_name，即goods。
        serializer=OrderGoodsSerializer(instance=order_goods,many=True) # 序列化订单中商品的详细信息，即获取订单数据时返回值中的c_goods的值
        data['order_goods_info']=serializer.data # 给标准(原始)序列化后的数据添加(插入)字典
        return data